Large scale data centers are a relatively new human artifact, and their organization and structure has evolved rapidly as the commercial opportunities they provide has expanded. Typical modern data centers are organized collections of clusters of hardware running collections of standard software packages, such as web servers database servers, etc., interconnected by high speed networking, routers, and firewalls. The task of organizing these machines, optimizing their configuration, debugging errors in their configuration, and installing and uninstalling software on the constituent machines is largely left to human operators.
Web services (e.g., software as a service “SaaS”) supported by data centers are also rapidly evolving (for example, a company might first offer a search service, and then an email service, and then a Map service, etc.). Such services rely on applications that are distributed to and hosted by one or more data centers. A service operator and a data center operator typically enter into an agreement for specific hardware resources (e.g., number of processors, disk space, memory, bandwidth, etc.). A typically arrangement dedicates a certain number of servers and disk space to the service in a manner where the applications that provide the service “live” on the dedicated servers. When conditions change, this type of arrangement incurs a significant management overhead for the data center and service operators. For example, a data center operator may upgrade various hardware components that affect execution of the service's applications. In such an example, hardware changes can generate ripples that force the service operator to revise or redevelop its applications to account for the changes to thereby ensure an acceptable level of service to the service's end users.
Various exemplary technologies described herein pertain to architectures and programming models that can facilitate application development, hosting and performance.